To enjoy the program, it is not required for you to write original missions. But if want to expand your mission library, and you're willing to do some programming, read on...
Contents:
1. Starship Mission Language Glossary
2. Mission Script Structure
in "Writing Part Two"
3. Map Tags
4. Overlays
5. Importing Your Mission
Created by Imergy(r) for Simon & Schuster Interactive.
Copyright 1998 All Rights Reserved.
SSML Author: Laurence Tietz
Director for Imergy: Peter Mackey
Executive Producer for Simon & Schuster Interactive: Liz Braswell
Knowing that the possibilities in the Star Trek universe are infinite, we wanted to give intrepid aficionados access to the programming language we created for the mission simulator portion of Starship Creator.
Using these instructions, and the IMPORT MISSION feature on the FLEET screen, you can expand your library of missions to include many different scenarios. Of course, you will encounter a few limitations to what is possible, but with a bit of imagination and creative writing you should discover many interesting possibilities.
As with all programming languages, exact precision is essential. One misplaced comma can cause anything from a temporal anomaly to a frozen interface. Don't worry, you can't "break" anything with a typo, but if your script isn't formatted exactly the way the program expects it to be, the outcome may vary from what you intended. Just follow the rule all software developers use and save any open files before you test-run a new script.
We hope this information gives anyone interested in making the effort the power to create their own simulations. If you develop a mission you'd like to share with others (or with us!) please do so.
A simple text "log entry" which will show up on the screen.
OR
A "message tag" ( example: MSG07 ) which refers to text in a separate "message table", which can contain log entries and-or map tags.
OR
A hyphen " - " (used like this: #symbol,-, ) which indicates you want no message to accompany the event.
For symbols shown below with ,-, you may replace the hyphen with simple text or a MSG code. Although for clarity the hyphens are surrounded by commas, in practice no spaces are used.
Certain #symbols require special messages, which contain information needed for the #symbol to be interpreted fully. You cannot attach text messages or tags to those symbols.
Where you see pairs of 000 000, a point coordinate is expected, indicating a location in space. (The map is 2000 wide by 1000 high, with 0 0 in the upper left corner. Note this differs from Cartesian space.) The first number is the horizontal coordinate, the second the vertical, separated by a space, with a few exceptions noted below.
Also, certain #symbols may be followed by a then/else sequence, explained below. (also see the examples)
And, a few #symbols require particular supporting symbols to follow them immediately in the command sequence.
similar commands, require a pair of map coordinates in the message portion (notice that unlike all other coordinates, these are separated by a ":" and not a space)
#testManeuverability, - ,
[then/else]
ship classes defined as more maneuverable will return positive
#testHitTarget , - ,
use this "-" for this command, don't attach text
watches progress of the ship until it reaches the destination
usually placed immedaitely after #goToWarp
#testHome , - ,
like #testhittarget but only used after #returnStarBase
--•• Command and Control System
#UseInternalCommSys, - ,
[then/else]
#UseRFTransciver, - ,
[then/else]
#UseSubSpaceRadio, - ,
[then/else]
#UseUTranslator, - ,
[then/else]
--•• Tactical
#raiseShields, - ,
#lowerShields, - ,
#cloak, - ,
[then/else]
if installed, activating the Defiant's cloaking device guarantees that #evadeDetection will always be successful
#unCloak, - ,
[then/else]
--•• Events
#blackHole, - ,
#asteroid, - ,
#wearNTear, - ,
#fireDrill, - ,
nothing particular happens with these except #asteroid automatically triggers an "insert" animation
these are placed in the time and location event overlays where you may attach appropriate messages
#damageIncident, 00000 aSystem,
replace the 00000 with a number from 1 to 50000 indicating damage
aSystem must be one of these terms:
crew science transportation powerPlant
propulsion weapons commandControl
structureSystem navigation sickBay supportSystems
--•• Science CMDs
#longRangeScan, 0000 0000,
[then/else]
replace the 0000s with a point coordinate (see "scan overlays")
requires sensor palette #1 to succeed
#freqScan, 0000 0000,
[then/else]
replace the 0000s with a point coordinate (see "scan overlays")
requires sensor palette #1 to succeed
#partSpectraScan, 0000 0000,
[then/else]
replace the 0000s with a point coordinate (see "scan overlays")
requires sensor palette #1 to succeed
#gravimetrScan, 0000 0000,
[then/else]
replace the 0000s with a point coordinate (see "scan overlays")
requires sensor palette #2 to succeed
#protspectScan, 0000 0000,
[then/else]
replace the 0000s with a point coordinate (see "scan overlays")
requires sensor palette #2 to succeed
#lifeFormScan, 0000 0000,
[then/else]
replace the 0000s with a point coordinate (see "scan overlays")
requires sensor palette #3 to succeed
#subSpaceScan, 0000 0000,
[then/else]
replace the 0000s with a point coordinate (see "scan overlays")
requires sensor palette #4 to succeed
#opticalScan, 0000 0000,
[then/else]
replace the 0000s with a point coordinate (see "scan overlays")
requires sensor palette #5 to succeed
#gravitonScan, 0000 0000,
[then/else]
replace the 0000s with a point coordinate (see "scan overlays")
requires sensor palette #5 to succeed
#gammaScan, 0000 0000,
[then/else]
replace the 0000s with a point coordinate (see "scan overlays")
requires sensor palette #6 to succeed
#infraRedScan, 0000 0000,
replace the 0000s with a point coordinate (see "scan overlays")
[then/else]
requires sensor palette #6 to succeed
#partclMapScan, 0000 0000,
replace the 0000s with a point coordinate (see "scan overlays")
[then/else]
requires sensor palette #6 to succeed
#launchProbe, 0000 0000 aPurpose,
[then/else]
replace the 0000s with a point coordinate of the target of the probe
aPurpose must be one of these:
CulturalAnalysis,
SampleRecovery,
LongTermObservation,
SpectralData,
EnergyData,
GeologicalData,
GravimetricData,
CommBeacon,
MessageProbe,
CommBeacon,
special case: inside the "then" branch, you can call #getProbeData
(The mission waits until the probe reaches its target.)
#getProbeData, - ,
[then/else]
only makes sense inside the "then" branch of #launchProbe
gives a positive "then" result if the probe was able to read info from the probe data overlay (see explanation of "overlays")
To accomplish each task, at least one of these classes of probes must be installed...
CulturalAnalysis: Class 7, 8, or 9
SampleRecovery: Class 3, or 5
LongTermObservation: Class 5, or 7
SpectralData: Class 1, 2, or 4
EnergyData: Class 1, 2, or 4
GeologicalData: Class 3
GravimetricData: Class 1, 2, 8, or 9
CommBeacon: Class 6, 8, or 9
MessageProbe: Class 8, or 9
#useLab, aLab,
aLab is one of these:
Cartography
Cybernetics
CulturalAnthropology
PlanetaryScience
Exobiology
[then/else]
--••Transport
#beamAwayTeam, - ,
#crewComp, 0 0 0 0 0 0,
these two commands must go together
the 0s are the number of crewmembers being transported, in this order:
command engineers civillians scientists support tactical
[then/else]
#beamCargo, - ,
#loadData, 1,
these two commands must go together
loadData is presumed to be tons of cargo (we suggest using 1 for now)
[then/else]
#engageTractorbeams, - ,
[then/else]
#disengageTractorbeams, - ,
#launchShuttleCraft, 0000 0000 aType ,
[then/else]
0000s are a point coordinate of the destination
aType must be one of:
Defense Impulse Cargo Passengers Warp Thrusters
("Thrusters" is how you use the Sphinx Workpod)
(The mission waits until the shuttle reaches its target relative to the ship's current location.)
--••Crew
#testCaptainSkill, - ,
[then/else]
#testChiefEngSkill, - ,
[then/else]
#testFirstOfcrSkill, - ,
[then/else]
#testCommsOfcrSkill, - ,
[then/else]
#testChMedOfcrSkill, - ,
[then/else]
#testScienceOfcrSkill, - ,
[then/else]
#testSecurityOfcrSkill, - ,
[then/else]
#testCounsellorSkill, - ,
[then/else]
--•• Facilities
#useSalon, - ,
[then/else]
#useHoloDeck, - ,
[then/else]
#useLounge, - ,
[then/else]
#useArboretum, - ,
[then/else]
--•• Weapons and Battle
#evadeDetection, - ,
[then/else]
#encounterAlien, - ,
triggers conflict (see "conflict overlay" explanation)
the command sequence doesn't return to the command following this one until the conflict is over
__discrete firing events (such as as targets or nonbattle events)
#fireAnyTorpedo,-,
attempts to automatically issue a #fireQuantumTorpedo command
if your vessel is not so equipped (and only Defiant and Sovereign can be), then a #firePhotonTorpedo command is given instead
#firePhotonTorpedo, - ,
[then/else]
#firePhaser, - ,
[then/else]
#fireQuantumTorpedo, - ,
[then/else]
--•• Messages and Report CMDs
__use any of these as a medium to pass log messages and map tags:
#getGenMessage, - ,
#reportStatus, - ,
(these commands also force a brief delay into the simulation):
#captainSpeaks, - ,
#otherSpeaks, - ,
#getAwayTeamReport, - ,
#getMedicalTeamReport, - ,
--•• Command Flow
#setGoals,MSG00,
expects the MSG00 tag to look exactly like this:
if you have one goal:
<MSG00 = [1:"Arrived in Sector 8."]>
if you have more than one goal:
<MSG00 = [1:"Arrived in Sector 8.", 2:"Scanned the planet."]>
(This can be any MSG number, not only 00.)
#goalXachieved, - ,
where X is actually the goal number listed in your #setGoals tag, example #goal2achieved, - ,
#executePhase, - ,
normally comes at the end of the Initial Phase sequence (the <ICMD = ...> tag
REQUIRED to move the command sequence to the next group of commands labelled <MO_CO_EG = ... >, the Execute Phase.
#closeMission, - ,
normally comes at the end of the Execute Phase sequence (the <MO_CO_EG = ...> tag
REQUIRED to move the command sequence to the Closing Phase group of commands labelled <CCMD = ... >
#linkMission, aScriptName,
! very Special Case : aScriptName is the field name of a new mission script (not implemented for imported scripts)
#die, -,
triggers #simOver
#simOver, - ,
triggers halt to the mission simulation
causes evaluation of the ship's performance and calculation of any cRedits earned (which are proportional to the total number of goals set vs. achieved)
[then/else] where indicated, means the command may be followed by a conditional branching structure. This way, you can cause certain commands to be executed only when a command is successful, and others if it is not. (You may omit the then/else structure, otherwise use the then/else as a pair.)
sample format (also see examples):
<aCommand>,-,
#thenCmd,0,
<aCommand>,-,
...one or more commands you want executed if a positive result
#elseCmd,0,
<aCommand>,-,
...one or more commands you want executed if a negative result
replace each 0 with the number of commands in each group
(this count must be exact or unexpected command sequences will result)
-o-
StarShip Mission Language
2.
MISSION SCRIPT STRUCTURE
To create a script which the program interpreter can understand, you need to arrange the commands described in the Glossary into "tags".
A script contains a series of "tags" which start with < and end with > .
You tell the script interpreter what kind of tag it is by using an identifier code, which looks like WXYZ= .
Here are some examples of the kinds of tags the script interpreter understands:
As you can see, each type of tag has a different structure, suited to its purpose.
There is also a comment mark // which you can use to insert notes to yourself or other readers of your script but which the interpreter will ignore. (Hint: Do not include the "#" mark inside your comments.)
Here is a very basic mission script, with very simple commands, just to help you see the structure. It is full of comments -- those lines starting with // -- to help further explain the sections of the script. Note that the comments are ignored by the program when the file is being read.
(For a sample mission script. For a complete version of an importable script and profile, see the "sector8.txt" file in the IMPORT folder inside the ShipMain folder. It has very few comments in it and is thus easier to see the structure.)
The indenting and spacing are ignored by the interpreter.
// Use these to trigger "Headquarters Alert" boxes
// The following tag must be present in all scripts
// Replace the "4" with whatever number of HQ alerts you have defined
<MO_HQ_EV0 = 4,>
//Now insert the tags for the various alert boxes
// (see the item in "OVERLAYS" for more detail)
<MO_HQ_EV1 =Vessel suffered an unrepairable failure. Mission cannot proceed. Make sure appropriate systems and crew are present, and that crew complement is adequate.,
#simOver,-,Acknowledged., #simOver,-,, #HQCmd1,>
<MO_HQ_EV2 =Note to the Admiral. We have detected a region of severely distorted gravity. Advise that no vessel proceed into this area. Uploading coordinates.,
#closeMission,-, Noted. Thanks for the alert., #nothing,-,, #HQCmd2,>
<MO_HQ_EV3 = What are our orders?,
#otherSpeaks,-,Return to base., #simOver,-,Stay there., #HQCmd3,>
<MO_HQ_EV4 =Captain to Admiral: It looks like this class of vessel may not be able to do the scientific analysis the mission requires. Request permission to return to starbase.,
#nothing,-,, #closeMission,-,Don't be concerned. Come home., #HQCmd4,>
<LEVTMAP = #blackHole,30,50,Black hole in area, #asteroid,80,100,Asteroid field,>
// Time event map
<TEVTMAP = #wearNTear,9999,-, #fireDrill,9999,-,>
// System failure tag
<MO_CO_SYSFAIL = #HQCmd1,-,>
// Scan and Probe Result Overlay_________________________________________
// (most are empty since we are doing no scans in this mission)
// Scan types (you must list all of these)
// <MO_SN_LR> is a long range scan
<MO_SN_LR = 0,0,0,0,#nothing, ;>
// <MO_SN_RF> is a freq (RF) scan
<MO_SN_RF = 0,0,0,0,#nothing, ;>
// <MO_SN_PA> is a Partical Spectrometry scan
<MO_SN_PA = 0,0,0,0,#nothing, ;>
// <MO_SN_GM> is a Gravimetric Scan
<MO_SN_GM = 0,0,0,0,#nothing, ;>
// <MO_SN_PR> is a Proton Spec Scan
<MO_SN_PR = 0,0,0,0,#nothing, ;>
// <MO_SN_LF> is a Life Form Scan
<MO_SN_LF = 0,0,0,0,#nothing, ;>
// <MO_SN_SS> is a Sub-Space Scan
<MO_SN_SS = 0,0,0,0,#nothing, ;>
// <MO_SN_OP> is a Optical Scan
<MO_SN_OP = 0,0,0,0,#nothing, ;>
// <MO_SN_GF> is a Graviton Flux Scan
<MO_SN_GF = 0,0,0,0,#nothing, ;>
// <MO_SN_GR> is a Gamma Radiation Scan
<MO_SN_GR = 0,0,0,0,#nothing, ;>
// <MO_SN_IR> is a InfraRed Scan
<MO_SN_IR = 0,0,0,0,#nothing, ;>
// <MO_SN_PM> is a Particle Map Scan
<MO_SN_PM = 0,0,0,0,#nothing, ;>
// Probe data overlays for any type of probe look like this...
<MO_PRB_DATA = 180,180,220,220,#something,Inverse-polarity graviton field detected.;>
//end
//make sure there is a <return> character after the last line of your script
That's it.
All of the tag identifiers you see above are required, the exception being the MSG table. Those MSG's are only required if you refer to such a MSG in the message part of your commands.
Other tags, notably Conflict Resolution, are optional, depending on the mission. Read all about Conflict Resolution overlays below.